package fr.afcepf.al22.projet1.dao.implementation;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;

import fr.afcepf.al22.projet1.dao.interfaces.IDaoAdresse;
import fr.afcepf.al22.projet1.entity.Adresse;

@Transactional
public class DaoAdresseImpl implements IDaoAdresse {
	private final Logger log = Logger.getLogger(this.getClass());
	private HibernateTemplate ht; 
	
	public void setSessionFactory(SessionFactory sf){
		ht = new HibernateTemplate(sf);
	}
	

	@Override
	public Adresse ajouterAdresse(Adresse adresse) {
		log.info("DAO Utilisateur : ajouter personne");
		ht.save(adresse);
		log.info("DAO Utilisateur : ajout ok");
		return adresse;
	}

	@Override
	public boolean supprimerAdresse(Adresse adresse) {
		log.info("DAO Adresse : ajouter adresse");
		ht.delete(adresse);
		log.info("DAO Adresse : suppression ok");
		return true;
	}

	@Override
	public Adresse getAdresseById(Integer id) {
		List<Adresse> liste;
		log.info("DAO Adresse : get adresse par id");
		liste = (List<Adresse>)ht.findByNamedParam("SELECT a FROM Adresse a WHERE a.idAdresse = :pId", "pId", id);
		Adresse retour = null;
		if(liste.size() == 1){
			retour = liste.get(0);
		}
		log.info("DAO Adresse : get ok");
		return retour;
	}

	@Override
	public List<Adresse> getAllAdresses() {
		List<Adresse> liste;
		log.info("DAO Adresse : get all adresse");
		liste = (List<Adresse>)ht.find("SELECT a FROM Adresse a");
		log.info("DAO Adresse : get ok");
		return liste;
	}

	@Override
	public Adresse getAdresseByAdresse(Adresse adresse) {
		List<Adresse> liste;
		String[] nomParam =  {"pNum","pRue", "pVille", "pCP"};
		Object[] param = {adresse.getNumeroAdresse(), adresse.getRueAdresse(), adresse.getVilleAdresse(), adresse.getCodePostalAdresse()};
		log.info("DAO Adresse : get adresse par adresse");
		liste = (List<Adresse>)ht.findByNamedParam("SELECT a FROM Adresse a WHERE a.numeroAdresse = :pNum AND a.rueAdresse = :pRue AND a.villeAdresse = :pVille AND a.codePostalAdresse = :pCP", nomParam, param);
		Adresse retour = null;
		if(liste.size() == 1){
			retour = liste.get(0);
		}
		log.info("DAO Adresse : get ok");
		return retour;
	}

	
}
